
import { animations } from "./animationManager";
import { NameParams } from "../strings/types";

/**
 * 动画类型定义
 * @description 定义动画的类型，包括默认动画('default')和自定义动画('custom')
 */
export type AnimationType = 'default' | 'custom';

/**
 * 动画名称类型定义
 * @description 从动画配置数组中提取动画名称类型
 */
type AnimationName = typeof animations[number]['name'];

/**
 * 有效动画配置项类型定义
 * @description 定义所有配置键及其对应类型
 * @property {string | Record<string, string>} keyframes - 动画关键帧，可以带 `@keyframes` 或不带
 * @property {string | number} duration - 动画持续时间
 * @property {string} timingFunction - 动画时间函数
 * @property {string | number} delay - 动画延迟时间
 * @property {'infinite' | number | string} iterationCount - 动画迭代次数
 * @property {'replace' | 'add' | 'accumulate'} composition - 动画合成方式
 */
export type validAnimationKeysDefinition = {
    keyframes: string | Record<string, string>;
    duration: string | number;
    timingFunction: string;
    delay: string | number;
    iterationCount: 'infinite' | number | string;
    composition: 'replace' | 'add' | 'accumulate';
}

/**
 * 动画定义的类型
 * @description 定义动画的基础配置项，包括名称和参数，以及有效的动画配置{@link validAnimationKeysDefinition}键和值
 * @property {string} name - 动画名称
 * @property {Record<string, string | number | boolean>} params - 动画参数
 * @property {keyof validAnimationKeysDefinition} key - 有效的动画配置键
 * @property {validAnimationKeysDefinition[keyof validAnimationKeysDefinition]} value - 动画配置值
 */
export type AnimationDefinition = NameParams & {
    [key in keyof validAnimationKeysDefinition]: validAnimationKeysDefinition[key];
}

/**
 * 用户传入的动画配置接口
 * @extends AnimationDefinition
 * @property {AnimationName} name - 动画名称
 * @property {keyof validAnimationKeysDefinition} key - 有效的动画配置键
 * @property {validAnimationKeysDefinition[keyof validAnimationKeysDefinition]} value - 动画配置值
 * @description 定义动画的配置项，继承基础配置项
 */
export interface AnimationConfig extends AnimationDefinition {
    name: AnimationName;
}

